Console.log   A
last analyzed

Complexity

Conditions 3

Size

Total Lines 17
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 13
dl 0
loc 17
rs 9.75
c 0
b 0
f 0
1
/* eslint-disable promise/prefer-await-to-callbacks */
2
import os from 'os';
3
import Transport from 'winston-transport';
4
import { isLoggable } from './utils/common';
5
import { defaultLogger, defaultSanitizer, defaultMaxListeners } from './defaults';
6
import { MESSAGE, LEVEL } from './constants';
7
8
export default class Console extends Transport {
9
    constructor(options = {}) {
10
        super(options);
11
        this.name = options.name || 'console';
12
        this.eol = options.eol || os.EOL;
13
        this.logger = options.logger || console;
14
        this.fallBackLogger = options.fallBackLogger || defaultLogger;
15
        this.handlers = options.levels || {};
16
        this.sanitizer = options.sanitizer || defaultSanitizer;
17
        this.setMaxListeners(options.maxListeners || defaultMaxListeners);
18
    }
19
20
    log(info, callback) {
21
        setImmediate(() => {
22
            this.emit('logged', info);
23
        });
24
        const level = info[LEVEL];
25
        const message = info[MESSAGE];
26
27
        const log = [
28
            this.handlers[level],
29
            this.logger[this.handlers[level]],
30
            this.logger[level],
31
            this.fallBackLogger
32
        ].find((element) => isLoggable(element));
33
34
        log(this.sanitizer(message));
35
        callback();
36
    }
37
}
38